{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|default_exp inference"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Inference"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> Code required for inference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "from fastai.learner import Learner, load_learner\n",
    "from fastcore.basics import patch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#|export\n",
    "@patch\n",
    "def get_X_preds(self: Learner, \n",
    "    X, \n",
    "    y=None, \n",
    "    bs=64, \n",
    "    with_input=False, # returns the input as well\n",
    "    with_decoded=True, # returns decoded predictions as well\n",
    "    with_loss=False, # returns the loss per item as well\n",
    "    act=None, # Apply activation to predictions, defaults to `self.loss_func`'s activation\n",
    "    ):\n",
    "    if with_loss and y is None:\n",
    "        print(\"with_loss set to False as y is None\")\n",
    "        with_loss = False\n",
    "    dl = self.dls.valid.new_dl(X, y=y, bs=bs)\n",
    "    output = list(self.get_preds(dl=dl, with_input=with_input, with_decoded=with_decoded, with_loss=with_loss, reorder=False, act=act))\n",
    "    if with_decoded and len(self.dls.tls) >= 2 and hasattr(self.dls.tls[-1], \"tfms\") and hasattr(self.dls.tls[-1].tfms, \"decodes\"):\n",
    "        output[2 + with_input] = self.dls.tls[-1].tfms.decode(output[2 + with_input])\n",
    "    return tuple(output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Get the predictions and targets, optionally with_input and with_loss.\n",
    "\n",
    "with_decoded will also return the decoded predictions (it reverses the transforms applied).\n",
    "\n",
    "The order of the output is the following: \n",
    "\n",
    "- input (optional): if with_input is True\n",
    "- **probabiblities** (for classification) or **predictions** (for regression)\n",
    "- **target**: if y is provided. Otherwise None.\n",
    "- **predictions**: predicted labels. Predictions will be decoded if with_decoded=True.\n",
    "- loss (optional): if with_loss is set to True and y is not None."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from tsai.data.external import get_UCR_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "dsid = 'OliveOil'\n",
    "X, y, splits = get_UCR_data(dsid, split_data=False)\n",
    "X_test = X[splits[1]]\n",
    "y_test = y[splits[1]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "learn = load_learner(\"./models/test.pth\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "⚠️ Warning: load_learner (from fastai) requires all your custom code be in the exact same place as when exporting your Learner (the main script, or the module you imported it from)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(tensor([[0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2639],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640]]),\n",
       " None,\n",
       " array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n",
       "        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n",
       "        '4', '4', '4', '4'], dtype='<U1'))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_probas, test_targets, test_preds = learn.get_X_preds(X_test, with_decoded=True)\n",
    "test_probas, test_targets, test_preds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from fastcore.test import test_close"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "torch_test_probas, torch_test_targets, torch_test_preds = learn.get_X_preds(torch.from_numpy(X_test), with_decoded=True)\n",
    "torch_test_probas, torch_test_targets, torch_test_preds\n",
    "test_close(test_probas, torch_test_probas)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(tensor([[0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2639],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640]]),\n",
       " tensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,\n",
       "         3, 3, 3, 3, 3, 3]),\n",
       " array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n",
       "        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n",
       "        '4', '4', '4', '4'], dtype='<U1'))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_probas2, test_targets2, test_preds2 = learn.get_X_preds(X_test, y_test, with_decoded=True)\n",
    "test_probas2, test_targets2, test_preds2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "<style>\n",
       "    /* Turns off some styling */\n",
       "    progress {\n",
       "        /* gets rid of default border in Firefox and Opera. */\n",
       "        border: none;\n",
       "        /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "        background-size: auto;\n",
       "    }\n",
       "    progress:not([value]), progress:not([value])::-webkit-progress-bar {\n",
       "        background: repeating-linear-gradient(45deg, #7e7e7e, #7e7e7e 10px, #5c5c5c 10px, #5c5c5c 20px);\n",
       "    }\n",
       "    .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "        background: #F44336;\n",
       "    }\n",
       "</style>\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "(tensor([[0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2639],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2421, 0.2364, 0.2641],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640],\n",
       "         [0.2574, 0.2422, 0.2364, 0.2640]]),\n",
       " tensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,\n",
       "         3, 3, 3, 3, 3, 3]),\n",
       " array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n",
       "        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n",
       "        '4', '4', '4', '4'], dtype='<U1'),\n",
       " TensorBase([1.3572, 1.3572, 1.3572, 1.3571, 1.3572, 1.4181, 1.4181, 1.4181,\n",
       "             1.4181, 1.4181, 1.4181, 1.4181, 1.4181, 1.4181, 1.4423, 1.4422,\n",
       "             1.4422, 1.4422, 1.3316, 1.3316, 1.3316, 1.3316, 1.3316, 1.3316,\n",
       "             1.3316, 1.3316, 1.3316, 1.3316, 1.3317, 1.3317]))"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_probas3, test_targets3, test_preds3, test_losses3 = learn.get_X_preds(X_test, y_test, with_loss=True, with_decoded=True)\n",
    "test_probas3, test_targets3, test_preds3, test_losses3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from fastcore.test import test_eq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "test_eq(test_probas, test_probas2)\n",
    "test_eq(test_preds, test_preds2)\n",
    "test_eq(test_probas, test_probas3)\n",
    "test_eq(test_preds, test_preds3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/javascript": "IPython.notebook.save_checkpoint();",
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/Users/nacho/notebooks/tsai/nbs/019_inference.ipynb saved at 2023-07-02 12:06:12\n",
      "Correct notebook to script conversion! 😃\n",
      "Sunday 02/07/23 12:06:15 CEST\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "                <audio  controls=\"controls\" autoplay=\"autoplay\">\n",
       "                    <source src=\"data:audio/wav;base64,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\" type=\"audio/wav\" />\n",
       "                    Your browser does not support the audio element.\n",
       "                </audio>\n",
       "              "
      ],
      "text/plain": [
       "<IPython.lib.display.Audio object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#|eval: false\n",
    "#|hide\n",
    "from tsai.export import get_nb_name; nb_name = get_nb_name(locals())\n",
    "from tsai.imports import create_scripts; create_scripts(nb_name)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
